﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "IUnCommandControlDefinition.h"

namespace gcmp
{
    class IControlState;
    class ILabelHandler;

/// \brief Label控件数据定义接口
class GCMP_GUI_BASE_INTERFACE_EXPORT ILabelDefinition : public IUnCommandControlDefinition
{
public:
    /// \brief 创建ILabelDefinition对象
    ///
    /// \param id       ILabelDefinition的Id,需保证唯一性
    /// \param caption    Label的显示文字
    /// \param tooltip    控件的提示信息
    /// \return  创建出ILabelDefinition对象。失败时返回空
    static OwnerPtr<ILabelDefinition> Create(const std::wstring& id, const std::wstring& caption, const std::wstring& tooltip);

    /// \brief 创建pLabelDefinition的引用对象
    ///
    /// 不能通过引用创建引用；pLabelDefinition需加到IControlDefinitionLibrary后才能创建引用对象
    /// \param pLabelDefinition 被引用的ILabelDefinition对象
    /// \return pLabelDefinition的引用对象
    static OwnerPtr<ILabelDefinition> CreateReference(const ILabelDefinition* pLabelDefinition);

    /// \brief 设置Label的显示文字
    ///
    /// \param caption   Label的显示文字
    /// \return    true表示成功， false表示失败
    virtual bool SetCaption(const std::wstring& caption) = 0;

    /// \brief 设置Label的Tooltip
    ///
    /// \param caption   Label的Tooltip
    /// \return    true表示成功， false表示失败
    virtual bool SetTooltip(const std::wstring& tooltip) = 0;

    /// \brief 设置Label的可见及可用状态
    ///
    /// \param pControlHandler Label控制对象
    /// \return     true表示成功，false表示失败
    virtual bool SetControlHandler(OwnerPtr<ILabelHandler> pControlHandler) = 0;

    /// \brief 设置控件是否可见,默认是可见的（相关代码会调整，请勿使用）
    ///
    /// 通过SetControlState设置后，SetVisible将不起作用
    /// \param visable  true表示设置可见，false表示设置不可见
    /// \return  设置成功返回true，否则返回false
    virtual bool SetVisible(bool visable) = 0;
};

}   // end namespace gcmp
